package com.quaidi.smartlocker.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.quaidi.smartlocker.entity.LockerCompartment;

import java.util.List;
import java.util.Map;

/**
 * 智能柜格Service接口
 * 
 * @author QuaiDi
 * @since 2025-08-26
 */
public interface LockerCompartmentService extends IService<LockerCompartment> {

    /**
     * 分配柜格
     * 
     * @param packageSize 包裹尺寸
     * @return 分配的柜格
     */
    LockerCompartment allocateCompartment(String packageSize);

    /**
     * 释放柜格
     * 
     * @param compartmentId 柜格ID
     * @return 是否成功
     */
    boolean releaseCompartment(Long compartmentId);

    /**
     * 获取柜格状态统计
     * 
     * @return 状态统计
     */
    Map<String, Long> getCompartmentStatusStatistics();

    /**
     * 按楼层获取柜格列表
     * 
     * @return 按楼层分组的柜格列表
     */
    Map<Integer, List<LockerCompartment>> getCompartmentsByFloor();

    /**
     * 验证柜格编号是否唯一（创建时使用）
     * 
     * @param compartmentCode 柜格编号
     * @return 是否唯一
     */
    boolean isCompartmentCodeUnique(String compartmentCode);

    /**
     * 验证柜格编号是否唯一（更新时使用）
     * 
     * @param compartmentCode 柜格编号
     * @param excludeId 排除的柜格ID（当前柜格）
     * @return 是否唯一
     */
    boolean isCompartmentCodeUniqueForUpdate(String compartmentCode, Long excludeId);

    /**
     * 创建柜格（带唯一性验证）
     * 
     * @param compartment 柜格信息
     * @return 创建结果
     */
    boolean createCompartmentWithValidation(LockerCompartment compartment);

    /**
     * 更新柜格（带唯一性验证）
     * 
     * @param id 柜格ID
     * @param compartment 柜格信息
     * @return 更新结果
     */
    boolean updateCompartmentWithValidation(Long id, LockerCompartment compartment);
}